import { isUndef } from './isUndef'
// 3126
/**
 * 
 * dependencies isUndef types
 * @param {*} fn 
 * @param {*} ctx 
 * @param {*} argCount 
 */
export function optimizeCb (fn, ctx, argCount) {
  if (isUndef(ctx)) return fn;

  switch (argCount == null ? 3 : argCount) {
    case 1:
      return function (val) {
        return fn.call(ctx, val);
      };

    case 3:
      return function (val, idx, collection) {
        return fn.call(ctx, val, idx, collection);
      };

    case 4:
      return function (accumulator, val, idx, collection) {
        return fn.call(ctx, accumulator, val, idx, collection);
      };
  }

  return function () {
    return fn.apply(ctx, arguments);
  };
}